<?php

/**
 * Controlador de los nombres
 *
 * @author chemaclass
 */
class NombresController extends BaseController {

    /**
     * 
     * @return View
     */
    public function getIndex() {
        $nombres = Nombre::all();
        $view = View::make('nombres.index');
        $view['nombres'] = $nombres;
        $view['queBuscar'] = Nombre::getQueBuscar();
        $view['colores'] = Color::getColores();
        $view['generos'] = Genero::getGeneros();
        $view['tamanos'] = Tamano::getTamanos();
        return $view;
    }

    /**
     * Mostrar el nombre
     */
    public function getShow($id) {
        $nombre = Nombre::find($id);
        $view = View::make('nombres.show');
        $view['nombre'] = $nombre;
        return $view;
    }

    /**
     * Editar el nombre
     */
    public function getEdit($id) {
        $nombre = Nombre::find($id);
        $view = View::make('nombres.edit');
        $view['nombre'] = $nombre;
        return $view;
    }

    /**
     * Actualizar el nombre
     */
    public function putUpdate($id = 0) {
        return "editNombre: $id";
    }

    /**
     * Eliminar el nombre
     */
    public function deleteDelete() {
        $input = Input::all();
        Utils::err("> delete()");
        Utils::err(Utils::arrToStr($input, 'Input::all'));
        if (!isset($input['id'])) {
            return Response::json(array('error' => "Not found"));
        } else {
            $id = $input['id'];

            $nombre = Nombre::find($id);
            Utils::err("nombre: $nombre");
            /* if ($nombre == null) {
              return "error";
              } */
            $nombre->delete();
            return Response::json(array('id' => $id));
        }
    }

    /**
     * Crear un nuevo nombre
     * 
     * @return Devuelve el nuevo nombre creado
     */
    public function postCreate() {
        $input = array_except(Input::all(), array('_token'));

        $valid = Validator::make($input, Nombre::$rules);
        if ($valid->fails()) {
            return Redirect::back()->withErrors($valid);
        } else {
            $nombre = new Nombre;
            $nombre->nombre = $input['nombre'];
            $nombre->color_id = $input['color'];
            $nombre->genero_id = $input['genero'];
            $nombre->tamano_id = $input['tamano'];
            $nombre->save();
            return Response::json($nombre->toArray());
        }
    }

    /**
     * Buscar nombres por nombre, color, género, tamaño
     * 
     * @return json resultante con los nombres encontrados
     */
    public function postSearch() {
        $input = Input::get();
        $abuscar = trim($input['abuscar']);
        $que = $input['que'];
        $query = $this->getQueryByQue($que, $abuscar);
        // Preparamos el json a enviar
        $json = array();
        foreach ($query as $nombre) {
            $json[] = $nombre->toArray();
        }
        return Response::json($json);
    }

    /**
     * Obtener la query con los nombres
     * 
     * @param type $que
     * @param type $abuscar
     * @return Query Resultado de la búsqueda de los nombres
     */
    private function getQueryByQue($que, $abuscar = "") {
        if ($que == 'nombre') {
            return Nombre::where("nombre", 'LIKE', "%$abuscar%")->get();
        } else {
            $class = ucfirst($que);
            //Obtenemos las ids de lo que vamos a buscar
            $iids = $class::with('nombres')
                    ->where("tipo", 'LIKE', "%$abuscar%")
                    ->get(array('id'));
            $ids = array();
            foreach ($iids as $id) {
                $ids[] = $id->id;
            }
            return Nombre::whereIn("{$que}_id", $ids)->get();
        }
    }

}
